﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Collections.ObjectModel;
using produccion.AccesoDatos;

namespace produccion.modelo
{
    public class MRecibirdePlanta : ObservableObject
    {
        MDOgeneral _mod = new MDOgeneral();
        private ProcesoProduccionRepositorio _rep = new ProcesoProduccionRepositorio();

        #region Propiedades
        private string _strNumeroOrden;
        public string strNumeroOrden
        {
            get { return _strNumeroOrden; }
            set { _strNumeroOrden = value; }
        }

        private string _strNumeroReparacion;
        public string strNumeroReparacion
        {
            get { return _strNumeroReparacion; }
            set { _strNumeroReparacion = value; }
        }

        private Int32 _numConsecutivo;
        public Int32 numConsecutivo
        {
            get { return _numConsecutivo; }
            set { _numConsecutivo = value; }
        }

        private string _strCodigoCliente;
        public string strCodigoCliente
        {
            get { return _strCodigoCliente; }
            set { _strCodigoCliente = value; }
        }

        private string _strNombreCliente;
        public string strNombreCliente
        {
            get { return _strNombreCliente; }
            set { _strNombreCliente = value; }
        }

        private string _strReferencia;
        public string strReferencia
        {
            get { return _strReferencia; }
            set { _strReferencia = value; }
        }

        private string _strNombreReferencia;
        public string strNombreReferencia
        {
            get { return _strNombreReferencia; }
            set { _strNombreReferencia = value; }
        }

        private string _strColor;
        public string strColor
        {
            get { return _strColor; }
            set { _strColor = value; }
        }

        private string _strNombreColor;
        public string strNombreColor
        {
            get { return _strNombreColor; }
            set { _strNombreColor = value; }
        }

        private string _strTalla;
        public string strTalla
        {
            get { return _strTalla; }
            set { _strTalla = value; }
        }

        private DateTime _dtmFechaRecibido;
        public DateTime dtmFechaRecibido
        {
            get { return _dtmFechaRecibido; }
            set { _dtmFechaRecibido = value; }
        }

        private string _strTipo;
        public string strTipo
        {
            get { return _strTipo; }
            set { _strTipo = value; }
        }

        private string _strDaño1;
        public string strDaño1
        {
            get { return _strDaño1; }
            set { _strDaño1 = value; }
        }

        private string _strDaño2;
        public string strDaño2
        {
            get { return _strDaño2; }
            set { _strDaño2 = value; }
        }

        private string _strDaño3;
        public string strDaño3
        {
            get { return _strDaño3; }
            set { _strDaño3 = value; }
        }

        private string _strDaño4;
        public string strDaño4
        {
            get { return _strDaño4; }
            set { _strDaño4 = value; }
        }

        private string _strDaño5;
        public string strDaño5
        {
            get { return _strDaño5; }
            set { _strDaño5 = value; }
        }

        private string _strProceso1;
        public string strProceso1
        {
            get { return _strProceso1; }
            set { _strProceso1 = value; }
        }

        private string _strProceso2;
        public string strProceso2
        {
            get { return _strProceso2; }
            set { _strProceso2 = value; }
        }

        private string _strProceso3;
        public string strProceso3
        {
            get { return _strProceso3; }
            set { _strProceso3 = value; }
        }

        private string _strProceso4;
        public string strProceso4
        {
            get { return _strProceso4; }
            set { _strProceso4 = value; }
        }

        private string _strProceso5;
        public string strProceso5
        {
            get { return _strProceso5; }
            set { _strProceso5 = value; }
        }

        private string _strObservacion;
        public string strObservacion
        {
            get { return _strObservacion; }
            set { _strObservacion = value; }
        }

        private string _strEstado;
        public string strEstado
        {
            get { return _strEstado; }
            set { _strEstado = value; }
        }

        private string _strNumeroDocumento;
        public string strNumeroDocumento
        {
            get { return _strNumeroDocumento; }
            set { _strNumeroDocumento = value; }
        }

        private Boolean _logSeleccionado;
        public Boolean logSeleccionado
        {
            get { return _logSeleccionado; }
            set { _logSeleccionado = value; }
        }

        private string _strObservaciones;
        public string strObservaciones
        {
            get { return _strObservaciones; }
            set { _strObservaciones = value; }
        }

        #endregion

        #region Metodos
        public List<MRecibirdePlanta> listarReparaciones(string strEstado, string strCliente)
        {
            try
            {
                string strCondicion1 = "";

                if (strCliente == "")
                    strCondicion1 = " and 1=1 ";
                else
                    strCondicion1 = " and a.codcli_erp  = '" + strCliente + "'";

                string query = "select a.NROORD_ERP, a.NROREP_ERP, a.CONSEC_ERP, a.CODCLI_ERP, b.NOMCLI_CLI, a.CODREF_ERP, c.NOMREF_REF, a.CODCOL_ERP, d.NOMCOL_COL, a.CODTAL_ERP, e.FECDET_DRP, a.TIPREP_ERP, nvl(f.nomdan_dan, ' ') as strDaño1, nvl(g.nomdan_dan, ' ') as strDaño2, nvl(h.nomdan_dan, ' ') as strDaño3, nvl(i.nomdan_dan, ' ') as strDaño4, nvl(j.nomdan_dan, ' ') as strDaño5, nvl(k.nommot_mrp, ' ') as strProceso1, nvl(l.nommot_mrp, ' ') as strProceso2, nvl(m.nommot_mrp, ' ') as strProceso3, nvl(n.nommot_mrp, ' ') as strProceso4, nvl(o.nommot_mrp, ' ') as strProceso5, e.OBSERV_DRP, a.observ_erp from encrepp a inner join maeclip b on a.codcli_erp = b.codcli_cli inner join maeref c on a.codref_erp = c.codref_ref inner join maecol d on a.codcol_erp = d.codcol_col inner join detrepp e on a.codcli_erp = e.codcli_drp and a.nrorep_erp = e.nrorep_drp and a.consec_erp = e.consec_drp and e.NUMERO_DRP = 1 left join tabdan f on substr(a.codmot1_erp,1,1) = f.secdan_dan and substr(a.codmot1_erp,2,2) = f.coddan_dan left join tabdan g on substr(a.codmot2_erp,1,1) = g.secdan_dan and substr(a.codmot2_erp,2,2) = g.coddan_dan left join tabdan h on substr(a.codmot3_erp,1,1) = h.secdan_dan and substr(a.codmot3_erp,2,2) = h.coddan_dan left join tabdan i on substr(a.codmot4_erp,1,1) = i.secdan_dan and substr(a.codmot4_erp,2,2) = i.coddan_dan left join tabdan j on substr(a.codmot5_erp,1,1) = j.secdan_dan and substr(a.codmot5_erp,2,2) = j.coddan_dan left join motrepp k on a.codprc1_erp = k.codmot_mrp left join motrepp l on a.codprc2_erp = l.codmot_mrp left join motrepp m on a.codprc3_erp = m.codmot_mrp left join motrepp n on a.codprc4_erp = n.codmot_mrp left join motrepp o on a.codprc5_erp = o.codmot_mrp where a.estado_erp = '" + strEstado + "' and tiprep_erp in ('G','S','R') " + strCondicion1 + " order by a.NROORD_ERP "; 

                DataTable val = _mod.consulta(query);
                List<MRecibirdePlanta> lisreparaciones = new List<MRecibirdePlanta>();
                if (strCliente == "")
                {
                    foreach (DataRow r in val.Rows)
                    {
                        lisreparaciones.Add(new MRecibirdePlanta
                        {
                            strNumeroOrden = r["NROORD_ERP"].ToString(),
                            strNumeroReparacion = r["NROREP_ERP"].ToString(),
                            numConsecutivo = Convert.ToInt32(r["CONSEC_ERP"]),
                            strCodigoCliente = r["CODCLI_ERP"].ToString(),
                            strNombreCliente = r["NOMCLI_CLI"].ToString(),
                            strReferencia = r["CODREF_ERP"].ToString(),
                            strNombreReferencia = r["NOMREF_REF"].ToString(),
                            strColor = r["CODCOL_ERP"].ToString(),
                            strNombreColor = r["NOMCOL_COL"].ToString(),
                            strTalla = r["CODTAL_ERP"].ToString(),
                            dtmFechaRecibido = Convert.ToDateTime(r["FECDET_DRP"]).Date,
                            strTipo = r["TIPREP_ERP"].ToString().Equals("G") ? "Garantia" : r["TIPREP_ERP"].ToString().Equals("S") ? "Servicio" : "Reconocido",
                            strDaño1 = r["strDaño1"].ToString().Trim(),
                            strDaño2 = r["strDaño2"].ToString().Trim(),
                            strDaño3 = r["strDaño3"].ToString().Trim(),
                            strDaño4 = r["strDaño4"].ToString().Trim(),
                            strDaño5 = r["strDaño5"].ToString().Trim(),
                            strProceso1 = r["strProceso1"].ToString().Trim(),
                            strProceso2 = r["strProceso2"].ToString().Trim(),
                            strProceso3 = r["strProceso3"].ToString().Trim(),
                            strProceso4 = r["strProceso4"].ToString().Trim(),
                            strProceso5 = r["strProceso5"].ToString().Trim(),
                            strObservaciones = r["OBSERV_ERP"].ToString().Trim(),
                            logSeleccionado = false
                        });
                    }
                }
                else
                {
                    foreach (DataRow r in val.Rows)
                    {
                        lisreparaciones.Add(new MRecibirdePlanta
                        {
                            strNumeroOrden = r["NROORD_ERP"].ToString(),
                            strNumeroReparacion = r["NROREP_ERP"].ToString(),
                            numConsecutivo = Convert.ToInt32(r["CONSEC_ERP"]),
                            strCodigoCliente = r["CODCLI_ERP"].ToString(),
                            strNombreCliente = r["NOMCLI_CLI"].ToString(),
                            strReferencia = r["CODREF_ERP"].ToString(),
                            strNombreReferencia = r["NOMREF_REF"].ToString(),
                            strColor = r["CODCOL_ERP"].ToString(),
                            strNombreColor = r["NOMCOL_COL"].ToString(),
                            strTalla = r["CODTAL_ERP"].ToString(),
                            dtmFechaRecibido = Convert.ToDateTime(r["FECDET_DRP"]).Date,
                            strTipo = r["TIPREP_ERP"].ToString().Equals("G") ? "Garantia" : r["TIPREP_ERP"].ToString().Equals("S") ? "Servicio" : "Reconocido",
                            strDaño1 = r["strDaño1"].ToString().Trim(),
                            strDaño2 = r["strDaño2"].ToString().Trim(),
                            strDaño3 = r["strDaño3"].ToString().Trim(),
                            strDaño4 = r["strDaño4"].ToString().Trim(),
                            strDaño5 = r["strDaño5"].ToString().Trim(),
                            strProceso1 = r["strProceso1"].ToString().Trim() + " - " + r["strProceso2"].ToString().Trim() + " - " + r["strProceso3"].ToString().Trim() + " - " + r["strProceso4"].ToString().Trim() + " - " + r["strProceso5"].ToString().Trim(),
                            strProceso2 = r["strProceso2"].ToString().Trim(),
                            strProceso3 = r["strProceso3"].ToString().Trim(),
                            strProceso4 = r["strProceso4"].ToString().Trim(),
                            strProceso5 = r["strProceso5"].ToString().Trim(),
                            strObservacion = r["OBSERV_DRP"].ToString().Trim(),
                            strObservaciones = r["OBSERV_ERP"].ToString().Trim(),
                            logSeleccionado = true
                        });
                    }
                }
                return lisreparaciones;
            }
            catch (Exception e) { throw e; }
        }

        public List<MRecibirdePlanta> consultarReparaciones(string strCliente, string strReparacion, string strOrden,  string strFechaInicial, string strFechaFinal, string strReferencia)
        {
            try
            {
                string strCondicion1 = "";
                string strCondicion2 = "";
                string strCondicion3 = "";
                string strCondicion4 = "";
                string strCondicion5 = "";

                if (strCliente == "")
                    strCondicion1 = " 1=1 ";
                else
                    strCondicion1 = " a.codcli_erp  = '" + strCliente + "'";

                if (strReparacion == "")
                    strCondicion2 = " and 1=1 ";
                else
                    strCondicion2 = " and a.NROREP_ERP  = '" + strReparacion + "'";

                if (strOrden == "")
                    strCondicion3 = " and 1=1 ";
                else
                    strCondicion3 = " and a.NROORD_ERP  = '" + strOrden + "'";

                strCondicion4 = " and e.FECDET_DRP between '" + strFechaInicial + "' and '" + strFechaFinal  + "'";

                if (strReferencia == "")
                    strCondicion5 = " and 1=1 ";
                else
                    strCondicion5 = " and a.CODREF_ERP  = '" + strReferencia + "'";

                string query = "select a.NROORD_ERP, a.NROREP_ERP, a.CONSEC_ERP, a.CODCLI_ERP, b.NOMCLI_CLI, a.CODREF_ERP, c.NOMREF_REF, a.CODCOL_ERP, d.NOMCOL_COL, a.CODTAL_ERP, e.FECDET_DRP, a.TIPREP_ERP, nvl(f.nomdan_dan, ' ') as strDaño1, nvl(g.nomdan_dan, ' ') as strDaño2, nvl(h.nomdan_dan, ' ') as strDaño3, nvl(i.nomdan_dan, ' ') as strDaño4, nvl(j.nomdan_dan, ' ') as strDaño5, nvl(k.nommot_mrp, ' ') as strProceso1, nvl(l.nommot_mrp, ' ') as strProceso2, nvl(m.nommot_mrp, ' ') as strProceso3, nvl(n.nommot_mrp, ' ') as strProceso4, nvl(o.nommot_mrp, ' ') as strProceso5, e.OBSERV_DRP, a.estado_erp, a.observ_erp from encrepp a inner join maeclip b on a.codcli_erp = b.codcli_cli inner join maeref c on a.codref_erp = c.codref_ref inner join maecol d on a.codcol_erp = d.codcol_col inner join detrepp e on a.codcli_erp = e.codcli_drp and a.nrorep_erp = e.nrorep_drp and a.consec_erp = e.consec_drp and e.NUMERO_DRP = 1 left join tabdan f on substr(a.codmot1_erp,1,1) = f.secdan_dan and substr(a.codmot1_erp,2,2) = f.coddan_dan left join tabdan g on substr(a.codmot2_erp,1,1) = g.secdan_dan and substr(a.codmot2_erp,2,2) = g.coddan_dan left join tabdan h on substr(a.codmot3_erp,1,1) = h.secdan_dan and substr(a.codmot3_erp,2,2) = h.coddan_dan left join tabdan i on substr(a.codmot4_erp,1,1) = i.secdan_dan and substr(a.codmot4_erp,2,2) = i.coddan_dan left join tabdan j on substr(a.codmot5_erp,1,1) = j.secdan_dan and substr(a.codmot5_erp,2,2) = j.coddan_dan left join motrepp k on a.codprc1_erp = k.codmot_mrp left join motrepp l on a.codprc2_erp = l.codmot_mrp left join motrepp m on a.codprc3_erp = m.codmot_mrp left join motrepp n on a.codprc4_erp = n.codmot_mrp left join motrepp o on a.codprc5_erp = o.codmot_mrp where " + strCondicion1 + strCondicion2 + strCondicion3 + strCondicion4 + strCondicion5 + " order by e.FECDET_DRP, a.NROORD_ERP desc";

                DataTable val = _mod.consulta(query);
                List<MRecibirdePlanta> lisreparaciones = new List<MRecibirdePlanta>();

                foreach (DataRow r in val.Rows)
                {
                    lisreparaciones.Add(new MRecibirdePlanta
                    {
                        strNumeroOrden = r["NROORD_ERP"].ToString(),
                        strNumeroReparacion = r["NROREP_ERP"].ToString(),
                        numConsecutivo = Convert.ToInt32(r["CONSEC_ERP"]),
                        strCodigoCliente = r["CODCLI_ERP"].ToString(),
                        strNombreCliente = r["NOMCLI_CLI"].ToString(),
                        strReferencia = r["CODREF_ERP"].ToString(),
                        strNombreReferencia = r["NOMREF_REF"].ToString(),
                        strColor = r["CODCOL_ERP"].ToString(),
                        strNombreColor = r["NOMCOL_COL"].ToString(),
                        strTalla = r["CODTAL_ERP"].ToString(),
                        dtmFechaRecibido = Convert.ToDateTime(r["FECDET_DRP"]).Date,
                        strTipo = r["TIPREP_ERP"].ToString().Equals("G") ? "Garantia" : r["TIPREP_ERP"].ToString().Equals("S") ? "Servicio" : "Reconocido",
                        strDaño1 = r["strDaño1"].ToString().Trim(),
                        strDaño2 = r["strDaño2"].ToString().Trim(),
                        strDaño3 = r["strDaño3"].ToString().Trim(),
                        strDaño4 = r["strDaño4"].ToString().Trim(),
                        strDaño5 = r["strDaño5"].ToString().Trim(),
                        strProceso1 = r["strProceso1"].ToString().Trim(),
                        strProceso2 = r["strProceso2"].ToString().Trim(),
                        strProceso3 = r["strProceso3"].ToString().Trim(),
                        strProceso4 = r["strProceso4"].ToString().Trim(),
                        strProceso5 = r["strProceso5"].ToString().Trim(),
                        strEstado = r["ESTADO_ERP"].ToString().Trim().Equals("P") ? "Pendiente" : r["ESTADO_ERP"].ToString().Equals("R") ? "Rec.Planta" : "Enviado",
                        strObservaciones = r["OBSERV_ERP"].ToString().Trim(),
                        logSeleccionado = false
                    });
                }
                
                return lisreparaciones;
            }
            catch (Exception e) { throw e; }
        }

        public List<MRecibirdePlanta> consultaResumendeReparaciones(string strCliente, DateTime dtmFechaInicial, DateTime dtmFechaFinal, string strTipoReparacion, string strTipoVista)
        {
            try
            {

                DataTable dt = _rep.consultarResumenReparaciones(strCliente, dtmFechaInicial, dtmFechaFinal, strTipoReparacion, strTipoVista);
                List<MRecibirdePlanta> lisreparaciones = new List<MRecibirdePlanta>();

                foreach (DataRow r in dt.Rows)
                {
                    lisreparaciones.Add(new MRecibirdePlanta
                    {
                        strCodigoCliente = r["CODCLI_TMP"].ToString(),
                        strNombreCliente = r["NOMCLI_TMP"].ToString(),
                        strNumeroReparacion = r["NROREP_TMP"].ToString(),
                        strNumeroDocumento = r["NRODOC_TMP"].ToString(),
                        strNumeroOrden = r["NROORD_TMP"].ToString(),
                        numConsecutivo = 1,
                        strReferencia = r["CODREF_TMP"].ToString(),
                        strNombreReferencia = r["NOMREF_TMP"].ToString(),
                        strColor = r["CODCOL_TMP"].ToString(),
                        strNombreColor = r["NOMCOL_TMP"].ToString(),
                        strTalla = r["CODTAL_TMP"].ToString(),
                        dtmFechaRecibido = DateTime.Now.Date,
                        strTipo = r["TIPO_TMP"].ToString(),
                        strDaño1 = r["DANO1_TMP"].ToString().Trim(),
                        strDaño2 = r["DANO2_TMP"].ToString().Trim(),
                        strDaño3 = r["DANO3_TMP"].ToString().Trim(),
                        strDaño4 = r["DANO4_TMP"].ToString().Trim(),
                        strDaño5 = r["DANO5_TMP"].ToString().Trim(),
                        strProceso1 = "",
                        strProceso2 = "",
                        strProceso3 = "",
                        strProceso4 = "",
                        strProceso5 = "",
                        strEstado = r["ESTADO_TMP"].ToString().Trim() == "O" ? "E" : r["ESTADO_TMP"].ToString().Trim(),
                        strObservaciones = r["OBSERV_TMP"].ToString().Trim(),
                        logSeleccionado = false
                    });
                }

                return lisreparaciones;
            }
            catch (Exception e) { throw e; }
        }

        public DataTable consultarDetalleReparaciones(string strReparacion)
        {
            try
            {
                string query = "select nrorep_drp as Numero, tipdet_drp as Tipo, fecdet_drp as Fecha, docdet_drp as Documento, observ_drp as Observaciones from detrepp where nrorep_drp = '" + strReparacion + "' order by tipdet_drp ";
                DataTable val = _mod.consulta(query);
                return val;
            }
            catch (Exception e) { throw e; }
        }

        
        #endregion
    }
}
